package org.sample.dining.starve;

import org.sample.dining.AbstractChopstick;

/**
 * Created by alan on 2017/7/12.
 * 该解法需同时拿起左右手筷子，若其中一支筷子未拿到则放弃其中一支
 * 由于线程执行的不确定性，会导致哲学家饿死
 */
public class Chopstick extends AbstractChopstick {

    public Chopstick(int index) {
        super(index);
    }

    @Override
    public synchronized boolean take() {
        if (!available) {
            return false;
        }
        available = false;
        return true;
    }

    @Override
    public synchronized void drop() {
        available = true;
    }
}